package com.cineplanet.dew.web;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import com.cineplanet.dew.exception.DAOExcepcion;
import com.cineplanet.dew.modelo.Cine;
import com.cineplanet.dew.modelo.Pelicula;
import com.cineplanet.dew.modelo.TipoPelicula;
import com.cineplanet.dew.service.CineService;
import com.cineplanet.dew.service.PeliculaService;
import com.cineplanet.dew.service.TipoPeliculaService;

public class PeliculaController extends MultiActionController {
	
	PeliculaService peliculaService;
	
	public PeliculaService getPeliculaService() {
		return peliculaService;
	}

	public void setPeliculaService(PeliculaService peliculaService) {
		this.peliculaService = peliculaService;
	}

	CineService cineService;

	public CineService getCineService() {
		return cineService;
	}

	public void setCineService(CineService cineService) {
		this.cineService = cineService;
	}
	
	TipoPeliculaService tipoPeliculaService;
	
	public TipoPeliculaService getTipoPeliculaService() {
		return tipoPeliculaService;
	}

	public void setTipoPeliculaService(TipoPeliculaService tipoPeliculaService) {
		this.tipoPeliculaService = tipoPeliculaService;
	}

	public ModelAndView index(HttpServletRequest request,HttpServletResponse response)  {
		
		try {
			List<Pelicula> peliculas = peliculaService.listar();
			List<TipoPelicula> tipoPeliculas = tipoPeliculaService.listar();
			
			request.setAttribute("peliculas", peliculas);
			request.setAttribute("tipoPeliculas", tipoPeliculas);
		} catch (DAOExcepcion e) {
			e.printStackTrace();
		}
		
		return new ModelAndView("insertarPelicula");
	}
	
	public ModelAndView insertar(HttpServletRequest request,HttpServletResponse response)  {
		String nombre = request.getParameter("nombre");
		String artistas = request.getParameter("artistas");
		String resumen = request.getParameter("resumen");
		String paisOrigen = request.getParameter("paisOrigen");
		String publicoObjetivo = request.getParameter("publicoObjetivo");
		String tipoEmision = request.getParameter("tipoEmision");
		String urlTrailer = request.getParameter("urlTrailer");
		String finActividad = request.getParameter("finActividad");
		String urlPoster = request.getParameter("urlPoster");
		int idTipoPelicula = Integer.parseInt(request.getParameter("tipoPelicula"));
		
		TipoPelicula tipoPelicula = new TipoPelicula();
		tipoPelicula.setIdTipoPelicula(idTipoPelicula);
		
		Pelicula pelicula = new Pelicula();
		pelicula.setAbstract_(resumen) ;
		pelicula.setArtistas(artistas) ;
		pelicula.setNombre(nombre) ;
		pelicula.setPaisOrigen(paisOrigen) ;
		pelicula.setPublicoObjetivo(publicoObjetivo) ;
		pelicula.setTipoEmision(tipoEmision) ;
		pelicula.setTipoPelicula(tipoPelicula) ;
		pelicula.setUrlPoster(urlPoster) ;
		pelicula.setUrlTrailer(urlTrailer) ;
		
		
		try {
			pelicula.setFinActividad(new SimpleDateFormat("yyyy-MM-dd").parse(finActividad));
			
			pelicula = peliculaService.insertar(pelicula);
			List<Pelicula> peliculas = peliculaService.listar();
			
			request.setAttribute("peliculas", peliculas);
		} catch (DAOExcepcion e) {
			e.printStackTrace();
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
		return new ModelAndView("redirect:/mantenerPelicula.htm");
	}
	
	public ModelAndView modificar(HttpServletRequest request,HttpServletResponse response)  {
		
		int idPelicula =  Integer.parseInt(request.getParameter("idPelicula"));
		String nombre = request.getParameter("nombre");
		String artistas = request.getParameter("artistas");
		String resumen = request.getParameter("resumen");
		String paisOrigen = request.getParameter("paisOrigen");
		String publicoObjetivo = request.getParameter("publicoObjetivo");
		String tipoEmision = request.getParameter("tipoEmision");
		String urlPoster = request.getParameter("urlPoster");
		
		Pelicula pelicula = new Pelicula();
		pelicula.setIdPelicula(idPelicula);
		pelicula.setAbstract_(resumen) ;
		pelicula.setArtistas(artistas) ;
		pelicula.setNombre(nombre) ;
		pelicula.setPaisOrigen(paisOrigen) ;
		pelicula.setPublicoObjetivo(publicoObjetivo) ;
		pelicula.setTipoEmision(tipoEmision) ;
		pelicula.setUrlPoster(urlPoster) ;
		
		try {
			Pelicula peliculaDet  = peliculaService.obtenerDetalleCualquierPelicula(idPelicula);
			pelicula.setFinActividad(peliculaDet.getFinActividad());
			pelicula.setTipoPelicula(peliculaDet.getTipoPelicula());
			pelicula.setUrlTrailer(peliculaDet.getUrlTrailer());
			pelicula.setCartelera(peliculaDet.getCartelera());
			
			pelicula = peliculaService.modificar(pelicula);
			List<Pelicula> peliculas = peliculaService.listar();
			
			request.setAttribute("peliculas", peliculas);
		} catch (DAOExcepcion e) {
			e.printStackTrace();
		} 
		
		return new ModelAndView("redirect:/mantenerPelicula.htm");
	}
	
	public ModelAndView mostrar(HttpServletRequest request,HttpServletResponse response)  {
		
		int idPelicula = Integer.parseInt(request.getParameter("idPelicula"));

		try {
			Pelicula pelicula  = peliculaService.obtenerDetalleCualquierPelicula(idPelicula);
			List<Pelicula> peliculas = peliculaService.listar();
			
			request.setAttribute("peliculas", peliculas);
			request.setAttribute("pelicula", pelicula);
		} catch (DAOExcepcion e) {
			e.printStackTrace();
		}
	
		return new ModelAndView("modificarPelicula");
	}
	
	public ModelAndView eliminar(HttpServletRequest request,HttpServletResponse response)  {
		
		int idPelicula = Integer.parseInt(request.getParameter("idPelicula"));
		
		Pelicula pelicula = new Pelicula();
		pelicula.setIdPelicula(idPelicula);

		try {
			pelicula = peliculaService.eliminar(pelicula);
			//List<Pelicula> peliculas = peliculaService.listar();
			
			//request.setAttribute("peliculas", peliculas);
		} catch (DAOExcepcion e) {
			e.printStackTrace();
		}
	
		return new ModelAndView("redirect:/mantenerPelicula.htm");
	}

}
